//8-3优先编码器（Priority Encode）； 优先编码器的特点是 ：当输入多个有效信号时，编码器只对优先级最高的信号进行编码。
//输入信号：din，ei输入使能，低电平有效
//输出信号：dout;eo输出使能，高电平有效；gs是组选择信号，只有当编码器输出二进制编码时，gs才为低电平。
//方法一：
/*
module Priority_Encode8_3(din,ei,eo,gs,dout);
      input [7:0] din;
		input ei;
		output reg eo,gs;
		output reg[2:0] dout;
always@(*) begin
    if(ei) begin dout<=3'b111;eo<=1;gs<=1;end
	 else  if(din==8'hff) begin dout<=3'b111;eo<=0;gs<=1;end
	 else  if(!din[7]) begin dout<=3'b111;eo<=1;gs<=0;end
    else  if(!din[6]) begin dout<=3'b110;eo<=1;gs<=0;end
	 else  if(!din[5]) begin dout<=3'b101;eo<=1;gs<=0;end
    else  if(!din[4]) begin dout<=3'b100;eo<=1;gs<=0;end
	 else  if(!din[3]) begin dout<=3'b011;eo<=1;gs<=0;end
    else  if(!din[2]) begin dout<=3'b010;eo<=1;gs<=0;end
	 else  if(!din[1]) begin dout<=3'b001;eo<=1;gs<=0;end
	 else begin dout<=3'b111;eo<=1;gs<=0;end
	 end
endmodule
*/


//方法二：
module Priority_Encode8_3(din,dout1);
      input [7:0] din;
		output [2:0] dout1;
function reg [2:0] dout;
    input [7:0] a;
	 begin
	 if(a[7]) dout=3'b111;
	 else if(a[6]) dout=3'b110;
	 else if (a[5]) dout =3'b101;
	 else if(a[4]) dout=3'b100;
	  else if(a[3]) dout=3'b011;
	 else if (a[2]) dout =3'b010;
	 else if(a[1]) dout=3'b001;
	 else if(a[0]) dout=3'b001;
	 else dout=3'bz;
	end
endfunction

assign dout1=dout(din);
endmodule
 
	
		
		
		
		
		


